package com.labManage.dao;

import com.labManage.entity.User;
import com.labManage.vo.UserVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserDao {
    /***************************************************************************************************************************
     *  @fn             insertUser
     *  @brief          给数据库中表User插入一条数据
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的UserDao.xml文件中编写，一一对应
     *  @param[in]      User   user  一条用户信息
     *  @return         1  插入成功
     *                  0  插入失败
     *  @author         杜健华，杜志华
     *  @date           2021.06.16
     ****************************************************************************************************************************/
    public int insertUser(User user);

    /***************************************************************************************************************************
     *  @fn             insertMulUser
     *  @brief          给数据库中表User一次性插入多条数据
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的UserDao.xml文件中编写，一一对应
     *  @param[in]      List<User> list  多条用户信息
     *  @return         =list列表长度  插入多条数据成功
     *                  <list列表长度  插入失败
     *  @author         杜健华，杜志华
     *  @date           2021.06.16
     ****************************************************************************************************************************/
    public int insertMulUser(List<User> list);

    /***************************************************************************************************************************
     *  @fn             selectUser
     *  @brief          根据条件查询数据库信息
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的UserDao.xml文件中编写，一一对应，可根据用户名，手机号，用户编号查询用户信息
     *  @param[in]      User   user  用户信息（主要参数为用户名、手机号和用户编号字段）
     *  @return         List<User>   用户信息列表
     *  @author         杜健华，杜志华
     *  @date           2021.06.16
     ****************************************************************************************************************************/
    public List<User> selectUser(User user);

    /***************************************************************************************************************************
     *  @fn             deleteUser
     *  @brief          根据学号删除数据库该用户信息
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的UserDao.xml文件中编写，一一对应
     *  @param[in]      String userNo  用户的编号
     *  @return         List<User>     用户信息列表
     *  @author         杜健华，杜志华
     *  @date           2021.06.16
     ****************************************************************************************************************************/
    public int deleteUser(String userNo);

    /***************************************************************************************************************************
     *  @fn             updateUser
     *  @brief          更新数据库某用户信息
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的UserDao.xml文件中编写，一一对应
     *  @param[in]      User   user    需要更新的用户信息
     *  @return         1    更新成功
     *                  0    更新失败
     *  @author         杜健华，杜志华
     *  @date           2021.06.16
     ****************************************************************************************************************************/
    public int updateUser(User user);

    /***************************************************************************************************************************
     *  @fn             selectUserByUserNoAndPassword
     *  @brief          根据学生号和密码查询用户信息
     *  @type           非静态方法
     *  @detail         抽象方法，具体sql在对应的UserDao.xml文件中编写，一一对应
     *  @param[in]      UserVo uservo    需要查找的用户信息，包括学生号和密码
     *  @return         User             返回用户信息
     *  @author         杜健华，杜志华
     *  @date           2021.06.21
     ****************************************************************************************************************************/
    public User selectUserByUserNoAndPassword(UserVo uservo);

    public List<UserVo> selectAllUserLimit(@Param("startIndex")Integer startIndex, @Param("limit")Integer limit,@Param("condition") UserVo condition);

    public int selectUserNum(@Param("condition") UserVo condition);

    public int deleteUserById(Long id);

    public String selectUserNameById(Long id);


    User selectByUserNo(String borrowPersonNo);
}
